package com.sms.service;

import com.sms.exception.DataFileCorruptedException;
import com.sms.exception.SMSException;

import java.util.Map;

/**
 * 报表生成服务接口
 * 位置：com.sms.service.ReportService
 */
public interface ReportService {
    /**
     * 生成学生成绩报表
     * @param studentId 学号
     * @return 报表数据（包含学生信息、各科成绩、平均分等）
     * @throws SMSException 当学生不存在时抛出
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    Map<String, Object> generateStudentReport(String studentId) throws SMSException, DataFileCorruptedException;
    
    /**
     * 生成班级成绩报表
     * @param className 班级名称
     * @return 报表数据（包含班级学生成绩统计）
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    Map<String, Object> generateClassReport(String className) throws DataFileCorruptedException;
    
    /**
     * 生成课程成绩报表
     * @param courseId 课程ID
     * @return 报表数据（包含课程成绩分布统计）
     * @throws SMSException 当课程不存在时抛出
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    Map<String, Object> generateCourseReport(String courseId) throws SMSException, DataFileCorruptedException;
    
    /**
     * 生成系统概要报表
     * @return 系统统计信息（学生数、课程数、成绩记录数等）
     * @throws DataFileCorruptedException 当数据文件损坏时抛出
     */
    Map<String, Object> generateSystemSummary() throws DataFileCorruptedException;
}